box = g_object_new (GTK_TYPE_MENU_SECTION_BOX, "margin", 10, NULL);
gtk_stack_add_named (stack, GTK_WIDGET (box), "main");
- box->tracker = gtk_menu_tracker_new (GTK_ACTION_OBSERVABLE (_gtk_widget_get_action_muxer (GTK_WIDGET (box))),
+ box->tracker = gtk_menu_tracker_new (GTK_ACTION_OBSERVABLE (_gtk_widget_get_action_muxer (GTK_WIDGET (box), TRUE)),
model, TRUE, FALSE, action_namespace,
gtk_menu_section_box_insert_func,
gtk_menu_section_box_remove_func, box);
widget->priv->style = style;
}
-void
-_gtk_widget_update_parent_muxer (GtkWidget *widget)
+GtkActionMuxer *
+_gtk_widget_get_parent_muxer (GtkWidget *widget,
+ gboolean create)
{
- GtkActionMuxer *parent_muxer;
-
- if (widget->priv->muxer == NULL)
- return;
+ GtkWidget *parent;
if (GTK_IS_WINDOW (widget))
- {
- parent_muxer = gtk_application_get_parent_muxer_for_window (GTK_WINDOW (widget));
- }
+ return gtk_application_get_parent_muxer_for_window (GTK_WINDOW (widget));
+
+ if (GTK_IS_MENU (widget))
+ parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
+ else if (GTK_IS_POPOVER (widget))
+ parent = gtk_popover_get_relative_to (GTK_POPOVER (widget));
else
- {
- GtkWidget *parent;
+ parent = gtk_widget_get_parent (widget);
- if (GTK_IS_MENU (widget))
- parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
- else if (GTK_IS_POPOVER (widget))
- parent = gtk_popover_get_relative_to (GTK_POPOVER (widget));
- else
- parent = gtk_widget_get_parent (widget);
+ if (parent)
+ return _gtk_widget_get_action_muxer (parent, create);
- parent_muxer = parent ? _gtk_widget_get_action_muxer (parent) : NULL;
- }
+ return NULL;
+}
+
+void
+_gtk_widget_update_parent_muxer (GtkWidget *widget)
+{
+ if (widget->priv->muxer == NULL)
+ return;
- gtk_action_muxer_set_parent (widget->priv->muxer, parent_muxer);
+ gtk_action_muxer_set_parent (widget->priv->muxer,
+ _gtk_widget_get_parent_muxer (widget, TRUE));
}
GtkActionMuxer *
-_gtk_widget_get_action_muxer (GtkWidget *widget)
+_gtk_widget_get_action_muxer (GtkWidget *widget,
+ gboolean create)
{
- if (widget->priv->muxer == NULL)
+ if (widget->priv->muxer)
+ return widget->priv->muxer;
+
+ if (create)
{
widget->priv->muxer = gtk_action_muxer_new ();
_gtk_widget_update_parent_muxer (widget);
- }
- return widget->priv->muxer;
+ return widget->priv->muxer;
+ }
+ else
+ return _gtk_widget_get_parent_muxer (widget, FALSE);
}
/**
g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (name != NULL);
- muxer = _gtk_widget_get_action_muxer (widget);
+ muxer = _gtk_widget_get_action_muxer (widget, TRUE);
if (group)
gtk_action_muxer_insert (muxer, name, group);